package ExceptionThrow;

public class Test {
    public static void test2(int a) throws CloneNotSupportedException{
       /* if(a == 10)
            throw new CloneNotSupportedException(); //编译时异常 */
        //法1 方法内处理
//        try
//        {
//            if(a == 10)
//                throw new CloneNotSupportedException(); //编译时异常
//        }catch(CloneNotSupportedException e){
//            e.printStackTrace();
//        }
        //法2用throws声明，由方法的调用者处理
        if(a == 10) {
            System.out.println("1111");
            throw new CloneNotSupportedException(); //编译时异常，必须此时长处理
        }
        System.out.println("11111");
    }


    //此时不算处理异常， 声明异常
    public static void test22(int a) throws CloneNotSupportedException{
        if(a == 10){
            throw new CloneNotSupportedException();
        }
        System.out.println("1111"); //一旦异常抛出，后续代码将不会执行
    }

    public static void main(String[] args) {
        //处理异常（如果不处理就用throws声明，层层往上调用，最后交给JVM)
        try {
            test2(10);
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        System.out.println("2");
    }



    public static void test1(int a){
        if(a == 10)
            throw new NullPointerException();//运行时异常
    }

    public static void main1(String[] args) {
        //test1(10); //抛出异常时需要捕捉它，没捕捉就交给JVM了 程序就异常终止
        try{ //手动处理
            test1(10);
        }catch(NullPointerException e){
            e.printStackTrace();
        }
        System.out.println("haha");
    }
}
